#include "Dibujador.h"
#include <gdkmm/general.h>
#include <glibmm/fileutils.h>
#include <cairomm-1.0/cairomm/context.h>

Dibujador::Dibujador(Gtk::DrawingArea* drawingArea) {
	_drawingArea = drawingArea;
}

void Dibujador::DibujarFondo(Glib::RefPtr<Gdk::Pixbuf>& imagen) {
	Cairo::RefPtr<Cairo::Context> context =
			_drawingArea->get_window()->create_cairo_context();

	context->save();

	// Reescalamos la imagen al tamanho de la pantalla
	Glib::RefPtr<Gdk::Pixbuf> fondoReescalado = imagen->scale_simple(
			_drawingArea->get_width(), _drawingArea->get_height(),
			Gdk::INTERP_NEAREST);

	Gdk::Cairo::set_source_pixbuf(context, fondoReescalado, 0, 0);
	context->rectangle(0, 0, _drawingArea->get_width(),
			_drawingArea->get_height());
	context->fill();
	context->restore();
}

void Dibujador::DibujarEntidad(Glib::RefPtr<Gdk::Pixbuf>& imagen,
		unsigned int x, unsigned int y) {
	//Get context
	Cairo::RefPtr<Cairo::Context> context =
			_drawingArea->get_window()->create_cairo_context();

	context->save();

	Gdk::Cairo::set_source_pixbuf(context, imagen, x, y);
	context->paint();

	context->restore();
}

void Dibujador::DibujarLinea(unsigned int x1, unsigned int y1,
		unsigned int x2, unsigned int y2) {
	//Get context
	Cairo::RefPtr<Cairo::Context> context =
			_drawingArea->get_window()->create_cairo_context();

	context->save();
	context->set_source_rgb(1, 0, 0);
	context->set_line_width(10);
	context->move_to(x1, y1);
	context->line_to(x2, y2);
	context->stroke();
	context->restore();
}

void Dibujador::DibujarTexto(const std::string& texto,
		unsigned int x,
		unsigned int y) {
	Cairo::RefPtr<Cairo::Context> context =
			_drawingArea->get_window()->create_cairo_context();

	context->save();
	Glib::RefPtr<Pango::Layout> pangoLayout = Pango::Layout::create(context);
	context->move_to(x, y);
	pangoLayout->set_text(texto);
	pangoLayout->update_from_cairo_context(context);
	pangoLayout->add_to_cairo_context(context);
	context->stroke();
	context->restore();
}

Dibujador::~Dibujador() { }